package com.doubao.user.service;

import com.doubao.common.result.Result;
import com.doubao.user.dto.response.UserStatisticsResponse;
import com.doubao.user.entity.UserStatistics;

/**
 * 用户统计服务接口
 */
public interface UserStatisticsService {

    /**
     * 获取用户统计信息
     *
     * @param userId 用户ID
     * @return 用户统计信息
     */
    UserStatisticsResponse getUserStatistics(Long userId);

    /**
     * 创建用户统计记录
     *
     * @param userId 用户ID
     * @return 创建结果
     */
    Result<Void> createUserStatistics(Long userId);

    /**
     * 增加用户聊天次数
     *
     * @param userId 用户ID
     * @return 操作结果
     */
    Result<Void> increaseChatCount(Long userId);

    /**
     * 增加用户消息数
     *
     * @param userId 用户ID
     * @param count  增加数量
     * @return 操作结果
     */
    Result<Void> increaseMessageCount(Long userId, Integer count);

    /**
     * 增加用户token使用量
     *
     * @param userId            用户ID
     * @param promptTokens      输入tokens
     * @param completionTokens  输出tokens
     * @return 操作结果
     */
    Result<Void> increaseTokenUsage(Long userId, Integer promptTokens, Integer completionTokens);

    /**
     * 增加用户智能体数量
     *
     * @param userId 用户ID
     * @return 操作结果
     */
    Result<Void> increaseDeviceCount(Long userId);

    /**
     * 减少用户智能体数量
     *
     * @param userId 用户ID
     * @return 操作结果
     */
    Result<Void> decreaseDeviceCount(Long userId);

    /**
     * 增加用户收藏数量
     *
     * @param userId 用户ID
     * @return 操作结果
     */
    Result<Void> increaseCollectionCount(Long userId);

    /**
     * 减少用户收藏数量
     *
     * @param userId 用户ID
     * @return 操作结果
     */
    Result<Void> decreaseCollectionCount(Long userId);

    /**
     * 更新用户最后活跃时间
     *
     * @param userId 用户ID
     * @return 操作结果
     */
    Result<Void> updateLastActiveTime(Long userId);

    /**
     * 获取用户统计基础数据
     *
     * @param userId 用户ID
     * @return 用户统计基础数据
     */
    UserStatistics getBaseStatistics(Long userId);

    /**
     * 获取用户今日已使用token
     *
     * @param userId 用户ID
     * @return 今日已使用token
     */
    int getTodayTokenUsage(Long userId);

    /**
     * 获取用户今日已使用token数量
     *
     * @param userId 用户ID
     * @return 今日已使用token数量
     */
    int getUserDailyTokenUsage(Long userId);

    /**
     * 获取用户最近7天token使用趋势
     *
     * @param userId 用户ID
     * @return token使用趋势数据
     */
    Object getTokenUsageTrend(Long userId);
}